export class Bullet extends Phaser.Physics.Matter.Sprite {
    constructor(scene, x, y, direction,texture) {
        super(scene.matter.world, x, y, `${texture}0`, 0);
        const { Body, Bodies } = Phaser.Physics.Matter.Matter; // 访问原生的 Matter 模块
        this.label = texture; // 设置标签为火球
        this.scene = scene; // 保存场景引用
        this.direction = direction; // 保存火球的移动方向
        scene.add.existing(this); // 将火球添加到场景中

        // this.setIgnoreGravity(true); // 设置忽略重力
        this.width=1;
        // 设置自定义的尺寸
        const radius = 1; // 自定义半径
        const options = {
            label: this.label,
            isSensor: true, // 确保火球可以进行物理碰撞
        };

        // 使用 Matter.js 创建一个圆形的物理体
        const bulletBody = Bodies.circle(x, y, radius, options);
        this.setExistingBody(bulletBody); // 将物理体应用到当前的 Sprite

        // 设置横向速度
        this.setVelocityX(5 * this.direction); // 设置火球的速度

        // 自定义物理属性
        this.setMass(1);
        this.setBounce(1); // 设置火球的反弹系数
        this.setFrictionAir(0);
        this.init(); // 初始化火球的动画和事件
    }

    init() {
        this.scene.events.on("update", this.update, this);

        // 创建缩放动画，循环播放
        this.tween = this.scene.tweens.add({
            targets: this,
            duration: 300, // 动画持续时间
            scale: { from: 0.9, to: 1 }, // 从0.9到1的缩放效果
            repeat: -1, // 无限循环
        });

        // 延迟3000毫秒后销毁火球
        this.scene.time.delayedCall(
            3000,
            () => { this.destroy(); },
            null, // 不需要传递参数
            this // 绑定上下文
        );
    }

    // 每帧更新方法
    update() {
        // 如果游戏已经结束，则不进行更新
        if (this.scene?.gameOver) return;
        // 其他更新逻辑可以在此处添加
    }

    // 销毁火球对象
    destroy() {
        this.tween.destroy(); // 销毁动画
        super.destroy(); // 调用父类的销毁方法
    }
}